/*
	Cabeçalho para o programa de arvore B.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/*
	ORDEM > ordem maxima possivel para a arvore.
	NIL > valor nulo.
	TRUE > valor verdadeiro.
	FALSE > valor falso.
	PAGESIZE > tamanho da estrutura de pagina da arvore.
*/
#define ORDEM 10
#define NIL (-1)
#define TRUE 1
#define FALSE 0
#define PAGESIZE sizeof(page)


/*
Descricao:
	Estrutura para armazenameto de uma pagina da arvore.

Variaveis:
	page > estrutura pagina.
	ppage > ponteiro para a estrutura da pagina da arvore.
*/
typedef struct page
{
	int qtd;
	int chaves[ORDEM];
	int filhos[ORDEM];
}page, *ppage;

/*
Desscricao:
	Funcao de abertura de arquivo.
	Sai do programa em caso de erro na abertura de arquivo.

Argumentos:
	fname > nome do arquivo fisico.
	mode > modo de abertura doa rquivo, o mesmo que em fopen().
*/
FILE *Fopen(char *fname, char *mode);

/*
Descricao:
	Cria arquivo de indice.
	Formato: <CHAVE> <RRN>\n

Argumentos:
	info > nome do arquivo de dados.
	iname > nome do arquivo de indice.
	tamreg > tamanho do registro fixo do arquivo de dados.
	begin > posicao em que comeca a chave primaria.
	keysize > tamanho da chave primaria.
*/
int index_new(char *info, char *iname, int tamreg, int begin, int keysize);

/*
Descricao:
	Dado um indice aberto na posicao inicial do registro, le-se o registro
para a estrutura definida, na memoria.

Argumentos:
	f > ponteiro para o indice aberto na posicao desejada
	chave > buffer para armazenar a chave lida
	pos > buffer para armazenar o RRN
*/
void le_indice(FILE *f, char *chave, int *pos);


/*
Descricao;
	Transfere da estrutura na memoria para o arquivo, na ultima linha deste.
	
Argumentos:
	file_name > nome do arquivo onde vai ser inserido o dados da memoria.
	pagina > a estrutura da memoria que contem os dados.
	tamreg . tamanho do registro do arquivo de informacoes.
*/
int read_ram(char* file_name, page* pagina, int tamreg);
